package collection._01collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

public class Demo02_Iterator {
    public static void main(String[] args) {
        /*
        Collection系列集合遍历的三种通用方式：
            1.迭代器遍历
                迭代器遍历相关的三个方法：
                Iterator<E> iterator:获取一个迭代器对象
                boolean hasNext():判断当前指向的位置是否有元素
                E next():获取当前指向的元素并移动指针
            2.foreach遍历
            3.lambda遍历
         */

        Collection<String> coll = new ArrayList<>();
        coll.add("aaa");
        coll.add("bbb");
        coll.add("ccc");
        coll.add("ddd");
        coll.add("eee");
        coll.add("fff");

        //1.迭代器遍历
        //迭代器就好比是一个箭头，默认指向集合的0索引位置
        Iterator<String> it = coll.iterator();
        //利用循环不断的去获取集合中的每一个元素
        while(it.hasNext()) {
            //next()方法的两件事情，获取元素并移动指针
            String str = it.next();
            System.out.println(str);
        }

        //没有元素异常

        //1.迭代器遍历完毕，指针不会复位，若还想遍历，只能在创建一个iterator对象
        //System.out.println(it.hasNext());false
        //2.循环中只能用一次next()方法
            //System.out.println(it.next());NoSuchElementException
        //3.迭代器遍历时，不能用集合的方法进行增加或者删除，会报异常！！！
        //ConcurrentModificationException 并发修改异常
            Iterator<String> it2 = coll.iterator();
            while(it2.hasNext()) {
                String str = it2.next();
                //coll.remove(str);//ConcurrentModificationException
                //只能用迭代器里面的方法进行删除
                //如果要添加元素暂时没有办法
                if("ccc".equals(str)) {
                    it2.remove();
                }
            }
        System.out.println(coll);


    }
}
